<?php
class Rest_Lib {
 
 private $useCurl;
 private $userAgent = "Rest";
 
 /*
  * constructor function
  */
function Rest_Lib() {
	//check if curl function exists
	if(function_exists('curl_init')) {
	  $this->useCurl = TRUE;   
	}
	else {
	  $this->useCurl = FALSE;
	}
}
 
 /*
  * GET method
  * @param string $url : this is the service url
  * @param array $arr: this is the key value
  * @return string : resulting response of GET method
  */
 public function get($url, $arr) {
     $str = '?';
    if(is_array($arr)) {
	  foreach($arr as $key => $value) {
	   $str .= urlencode($key) . '=' . urlencode($value) . '&';
	  }
	}
	else {
	  $str .= $arr;
	}
	$url .= $str;
	if($this->useCurl) {
	  $ch = curl_init();
	  curl_setopt($ch, CURLOPT_URL, $url);
	  curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
	  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	  $response = curl_exec($ch);
	  curl_close($ch);
	} 
	else {
	  $options = array(
	  'http' => array(
			'method' => 'GET',
			'header' => 'User-Agent:' . $this->userAgent . '\r\n' 
	  )
	  );
	  //create and return stream context with options
	  $streamContext = stream_context_create($options);
	  $fh = file_open($url, 'r', FALSE, $streamContext);
	  $response = fpassthru($fh);
	  fclose($fh);
	} 
	return $response;
 }
 
 /*
  * POST method
  * @param string: $url: service url
  * @param string $postData: request data
  * @return response
  */
 public function post($url, $postData) {
  if($this->useCurl) {
   $curlHeaders = array(
    'Content-Type: application/x-www-form-urlencoded'
   );
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders);
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_POST, TRUE);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
   curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
   $response = curl_exec($ch);
   curl_close($ch);
  }
  else {
   $options = array(
    'http' => array(
     'method' => 'POST',
     'header' => 'User-Agent: ' . $this->userAgent . '\r\n',
     'Content-Type: application/x-www-form-urlencoded' . '\r\n',
     'Content-Length: ' . strlen($postData) . '\r\n',
     'Content' => $postData
    )
   );
   $streamContext = stream_context_create($options);
   $fh = file_open($url, 'r', FALSE, $streamContext);
   $response = fpassthru($fh);
   fclose($fh);
  }
  return $response;
 }
 
 /*
  * PUT method
  * 
  */
 public function put($url, $putData) {
  if($this->useCurl) {
   $fh = fopen('php://memory', 'rw');
   fwrite($fh, $putData);
   rewind($fh);
   
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
   curl_setopt($ch, CURLOPT_INFILE, $fh);
   curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putData));
   curl_setopt($ch, CURLOPT_TIMEOUT, 10);
   curl_setopt($ch, CURLOPT_PUT, TRUE);
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
   $response = curl_exec($ch);
   curl_close($ch);
   fclose($fh);
  }
  else {
   $options = array(
    'http' => array(
     'method' => 'PUT',
     'header' => 'User-Agent: ' . $this->userAgent . '\r\n',
     'Content-Type: application/x-www-form-urlencoded' . '\r\n',
     'Content-Length: ' . strlen($putData) . '\r\n',
     'Content' => $putData 
    )
   );
   $context = stream_context_create();
   $fh = file_open($url, 'r', FALSE, $context);
   $response = fpassthru($fh);
   fclose($fh);
  }
  return $response;
 }
 
 /*
  * DELETE method
  */
 public function delete($url, $arr) {
  $str = '?';
  if(is_array($arr)) {
   foreach($arr as $key => $value) {
    $str .= urlencode($key) . '=' . urlencode($value) . '&';
   }
  }
  else {
   $str .= $arr;
  }
  $url .= $str;
  if($this->useCurl) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'delete');
   curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
   $response = curl_exec($ch);
   curl_close($ch);
  }
  else {
   $options = array(
    'http' => array(
     'method' => 'DELETE',
     'header' => 'User-Agent: ' . $this->userAgent . '\r\n'
    )
   );
   $context = stream_context_create($options);
   $fh = file_open($url, 'r', FALSE, $context);
   $response = fpassthru($fh);
   fclose($fh);
  }
  return TRUE;
 }
}
?>